home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / CIncludesTool 1.0 / original version / source files / locate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-29  |  1.2 KB  |  59 lines  |  [TEXT/MPS ]

  1. #include <Memory.h>
  2. #include <StdIO.h>
  3. #include "CIncludesCode.h"
  4.  
  5. extern Handle            database;
  6. extern dataHeaderType    dataHeader;
  7.  
  8.  
  9.  
  10. char *getDictionaryPtr( char ch )
  11. {
  12.     long        offset;
  13.  
  14.     offset = dataHeader.dictionaryOffsets[ dictionaryIndex( ch ) ];
  15.     return ( StripAddress(*database) + offset );
  16. }
  17.  
  18.  
  19. char *getNamePtr( short index )
  20. {
  21.     strArray    *sp = (strArray*) (*database + dataHeader.nameArrayOffset);
  22.  
  23.     return ( (char*) ((*sp)[index]) );
  24. }
  25.  
  26.  
  27. char *search( char *s, char* dictPtr )      // returns pointer or NIL
  28. {
  29.     char *p     = dictPtr + (4 + 2 + 4);    // endOffset = 4, fileIndex = 2, filePosition = 4
  30.     
  31.     char *limit    = dictPtr + *((long*) dictPtr);
  32.  
  33.     if ( *s )
  34.         while ( p < limit )
  35.             if ( strcmp( p, s ) == 0 )
  36.                 return ( p - (2 + 4) );        // fileIndex = 2, filePosition = 4
  37.             else
  38.                 p += strlen( p ) + (2 + 4 + 1);        // fileIndex = 2, filePosition = 4, '\0' = 1
  39.     return 0;
  40. }
  41.  
  42.  
  43. Boolean    locateIdentifier( char *dest, long *filePosition, char *src )
  44. {
  45.     char *entryPtr = search( src, getDictionaryPtr( *src ) );
  46.     char *p;
  47.  
  48.     if ( entryPtr )
  49.     {
  50.         p = getNamePtr( getShort( entryPtr ) );
  51.         strcpy( dest, p );
  52.  
  53.         *filePosition = getLong( entryPtr + 2 );
  54.     }
  55.  
  56.     return ( (Boolean) entryPtr );
  57. }
  58.  
  59.